teleport 是傳送的意思。假設我們今天希望在 navbar 和 footer 區塊都用到同一個元件,我們就可以透過 teleport 來實現。
結構 :
<teleport to="{ class 名稱或 Id }">
我們可以把這個結構放到頁面的指定位置上。
<div id="target"></div>
app.component('card', {
data() {
return {
title: '文件標題',
content: '文件內文',
toggle: false
}
},
template: `
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">{{ title }}</h5>
<p class="card-text">{{ content }}</p>
<button type="button" @click="toggle = !toggle">切換元素顯示</button>
</div>
</div>
// teleport 用法
<teleport to="#target">
<div v-if="toggle" class="alert alert-danger">被招喚的元素</div>
</teleport>
`,
props: ['item']
});
假設當我們所執行的JS程式碼在main區塊運行時,如果要使用 teleport 把元件位置設置在側欄的話,就會出錯。
這是因為當我們在運行這段 JS 時,它只在我們左側的 main 區塊執行,並沒有在右側區塊執行的緣故。
我們甚至可以利用 teleport
來改變文件的標題。
<new-title></new-title>
app.component('new-title', {
template: `<teleport to="title"> - 新增的標題片段</teleport>
<teleport to="h1"> - 新增的文字片段</teleport>`
})
JS
<script>
const app = Vue.createApp({
})
app.component('card', {
data() {
return {
title: '文件標題',
content: '文件內文',
toggle: false
}
},
template: `
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">{{ title }}</h5>
<p class="card-text">{{ content }}</p>
<button type="button" @click="toggle = !toggle">切換元素顯示</button>
</div>
</div>
<teleport to="#target">
<div v-if="toggle" class="alert alert-danger">被招喚的元素</div>
</teleport>
`,
props: ['item']
});
app.component('card2', {
template: `
<div class="alert alert-danger">被招喚的元素</div>
`
})
app.component('new-title', {
template: `<teleport to="title"> - 新增的標題片段</teleport>
<teleport to="h1"> - 新增的文字片段</teleport>`
})
app.mount('#app');
</script>